# 基础函数
# 定义函数

def add(x):
    if x == 1:
        print('1')
    else:
        print('2')
#  调用
add(1)

# 空函数(一个什么事也不做的空函数)
def nop():
    pass # 做占用符

#  返回多个值
def convertLon(x,y):
    return x,y

# 默认参数
def sum(x,b=1):
    # 参数检查
    if  isinstance(x,int) | isinstance(b,int):
        return x+b
    else:
        return 0
    
sum(1,2)
print("sum---")

# 可变参数（允许传入0个或任意个参数，函数内部自动组装成一个tuple）
# 定义一个函数，参数为可变参数nums
def  calr(* nums):
    if(len(nums)>=0):
        for i in nums:
            print("value--"+ str(i))
    print(nums)

calr(1,2,3,4,5,6,7,8,9,10)

# 关键字参数
# 关键字参数允许你传入0个或任意个汉参数名的参数（在函数内部自动组装dict）

def person(name,age,**kw):
    if "userName" in kw:
        pass
    print("name--", name ,"---age--", age,"---",kw)


person("zhangsan",18,userName="zhangsan",userAge=18)

# 命名参数 *arg
# *args是可变参数，args接收的是一个tuple；
# 如果没有可变参数，必须加一个*

# 高阶函数
# map  用于将一个函数作用于列表，从而得到另一个列表

def add(x):
    return x*x

# map函数接收两个参数，第一个参数是函数，第二个参数是列表（可迭代） 返回list
lists1= map(add,[12131,213,1231,23,2,1213])
print(len(list(lists1)))

# reduce函数 把一个函数作用于list上 累计计算，这个函数接收两个参数 第一个是函数（必须是两个参数） 第二个是列表 
from functools import reduce

def addV1(x,y):
    return x+y

# 累加计算
sum = reduce(addV1,[1,2,3,4,5])
print(sum)  

# filter函数 用于过滤序列，过滤掉不符合条件的元素，返回一个迭代器
def filter_Print(n):
    if n %2 == 0:
        print(n)

# 用list()函数获得所有结果并返回lis
list(filter(filter_Print,[1,2,3,4,5,6,7,8,9,10]))

#  sorted函数对list排序，第二个参数支持key来实现自定义排序 第三个参数 排序顺序 倒序
# sorted函数返回一个list
print(list(sorted(['bob', 'about', 'Zoo', 'Credit'],key=str.lower,reverse=True)))